package com.imooc.oa.service;

import com.imooc.oa.dao.RbacDao;
import com.imooc.oa.dao.UserDao;
import com.imooc.oa.entity.Node;
import com.imooc.oa.entity.User;
import com.imooc.oa.service.exception.BussinessException;
import com.imooc.oa.utils.MD5Utils;

import java.util.List;

public class UserService {
    private UserDao userDao=new UserDao();
    private RbacDao rbacDao=new RbacDao();

    /**
     * 根据前台输入进行登陆验证
     * @param username 前台输入的用户名
     * @param password 前台输入的密码
     * @return 校验通过后，包含对应用户数据的User实体类
     * @throws BussinessException L001-用户名不存在，L002-密码错误
     */
    public User checkLogin(String username, String password)
    {
        User user = userDao.selectByUsername(username);
        if(user==null)
        {
            //用户不存在时，抛出异常
            throw  new BussinessException("L001","用户名不存在");
        }
        //先用查找到的用户的盐值对表单获得的密码进行加盐取md5摘要，然后和用户的密码（数据库中的密码是md5摘要格式）进行对比
        String md5= MD5Utils.md5Digest(password, user.getSalt());
        if(!md5.equals(user.getPassword()))
        {
            //密码不匹配时抛出错误
            throw new BussinessException("L002", "密码错误");
        }
        return user;
    }

    /**
     * 根据用户查询用户具备的功能
     * @param userId 用户id
     * @return 功能集合
     */
    public List<Node> selectByUserId(Long userId)
    {
        List<Node> nodeList = rbacDao.selectNodeByUserId(userId);
        return nodeList;
    }
}
